/**
 * w肵t[~߂
 * 
 * @param {Integer} time ҂t[
 */
function FWait( time ){
	loop( time ){
		yield;
	}
}

/**
 * w肵t[~߂
 * ~X͕܂Ŏҋ@܂
 * 
 * @param {Integer} time ҂t[
 */
function PWait( time ){
	while( time > 0 ){
		if( !OnMissed() ){
			time -= 1;
		}
		
		yield;
	}
}

/**
 * OBJ_SHOT֐
 * CreatePlayerShot01Ɠʂ
 * 
 * @param {Integer} x           exW
 * @param {Integer} y           eyW
 * @param {Integer} speed       x
 * @param {Integer} angle       px
 * @param {Integer} pow         З
 * @param {Integer} penetration ђʗ
 * @param {Integer} graph       摜
 * @param {Integer} alpha       l
 * @return {Object} 쐬IuWFNgid
 */
function CreateObjPlayerShot( x, y, speed, angle, pow, penetration, graph, alpha ){
	let obj = Obj_Create( OBJ_SHOT );
	Obj_SetPosition( obj, x, y );
	Obj_SetSpeed( obj, speed );
	Obj_SetAngle( obj, angle );
	ObjShot_SetGraphic( obj, graph );
	ObjShot_SetDamage( obj, pow );
	ObjShot_SetPenetration( obj, penetration );
	Obj_SetAlpha( obj, alpha );
	
	return obj;
}


/**
 * L[Xe[gi[ϐ
 */
let Key_Left     = 0;
let Key_Right    = 0;
let Key_Up       = 0;
let Key_Down     = 0;
let Key_Shot     = 0;
let Key_Bomb     = 0;
let Key_SlowMove = 0;
let Key_Skip     = 0;
let Key_User     = 0;

/**
 * L[Xe[gꊇŊi[ϐ
 */
function GetKeyStateAll(){
	Key_Left     = GetKeyState( VK_LEFT );
	Key_Right    = GetKeyState( VK_RIGHT );
	Key_Up       = GetKeyState( VK_UP );
	Key_Down     = GetKeyState( VK_DOWN );
	Key_Shot     = GetKeyState( VK_SHOT );
	Key_Bomb     = GetKeyState( VK_BOMB );
	Key_SlowMove = GetKeyState( VK_SLOWMOVE );
	Key_Skip     = GetKeyState( VK_SKIP );
	Key_User     = GetKeyState( VK_USER );
}

/**
 * w肵_ł߂GXYW擾
 * 
 * @param {Integer} x       _xW
 * @param {Integer} y       _yW
 * @return {Array(Integer)} xyW̔z Ȃꍇ͉ʂ̒Ԃ
 */
function GetNearestEnemyXY( x, y ){
	let tx = GetCenterX();
	let ty = GetCenterY();
	let mindist = 1000 * 1000;
	let eid = 0;
	let ex = 0;
	let ey = 0;
	let dx = 0;
	let dy = 0;
	let dist = 0;
	
	ascent( enemy in EnumEnemyBegin()..EnumEnemyEnd() ){
		eid = EnumEnemyGetID( enemy );
		ex = GetEnemyInfo( eid, ENEMY_X );
		ey = GetEnemyInfo( eid, ENEMY_Y );
		dx = x - ex;
		dy = y - ey;
		dist = dx ^ 2 + dy ^ 2;
		
		if( mindist > dist ){
			mindist = dist;
			tx = ex;
			ty = ey;
		}
	}
	
	return [ tx, ty ];
}

/**
 * w肵_̑Oɑ݂Ał߂GXYW擾
 * 
 * @param {Integer} x       _xW
 * @param {Integer} y       _yW
 * @param {Integer} wid     e鉡
 * @return {Array(Integer)} xyW̔z ȂꍇNULLԂ
 */
function GetFrontEnemyXY( x, y, wid ){
	let tx = NULL;
	let ty = NULL;
	let mindist = 1000 * 1000;
	let eid = 0;
	let ex = 0;
	let ey = 0;
	let dx = 0;
	let dy = 0;
	let dist = 0;
	let wdist = 0;
	
	ascent( enemy in EnumEnemyBegin()..EnumEnemyEnd() ){
		eid = EnumEnemyGetID( enemy );
		ex = GetEnemyInfo( eid, ENEMY_X );
		ey = GetEnemyInfo( eid, ENEMY_Y );
		dx = x - ex;
		dy = y - ey;
		dist = dx ^ 2 + dy ^ 2;
		wdist = absolute( ex - x );
		
		if( mindist > dist && wdist < wid && dy > 0 ){
			mindist = dist;
			tx = ex;
			ty = ey;
		}
	}
	
	return [ tx, ty ];
}
